Selene Shepard поделилась ссылкой
8 июля, 10:14
Уж полночь близится

Делала я свой первый сайт на Django. Ни Django, ни Python я ещё толком не знала, так что в учебниках и мануалах проводила вдесятеро больше времени, чем в IDE. Потихоньку-полегоньку сайт строился, проблемы возникали и решались, Гугл и документация — наши друзья.


На одной из страничек нужно мне было вывести список мероприятий в рамках проекта. Мероприятия добавлялись в админке, естественно; у каждого были параметр «дата и время проведения». Что характерно, в модели (и в базе) это один параметр типа datetime, а админка по умолчанию использует для него два поля — под дату и под время. На страничке же мне нужно было, чтобы был заголовок типа «Август 2014», а под ним — список мероприятий на этот месяц.


Для начала вывожу просто список всех событий, отсортированный по дате — всё работает. Курю маны, пишу группировки, чтобы события каждого месяца объединялись в один список. Навожу красоту, так, что имя каждого списка становится объектом datetime — так его можно будет потом красиво отформатировать в шаблоне — работает…


И тут я вижу странный баг.


Было у меня специально забито тестовое событие, которое уже прошло — от 1 июля 2014 (забивалось оно четвёртого). Казалось бы, заголовок над ним должен гласить «Июль 2014» — а на меня смотрел «Июнь». Проверяю базу — в базе июль. Проверяю группировку — всё верно, остальные месяцы правильные. Чешу репу, курю маны, ставлю отладочные выводы…


Доходит. В настройках проекта у меня было указано, что мы живём в России, более того — в Москве, и время у нас спешит на четыре часа по сравнению с UTC. Django умный и за временем следит сам; в админке же при вводе времени есть специальная кнопочка, которая подставляет в поле текущее время. Дату — первое июля — я ввела руками, а время поставила текущее: час ночи с копейками. В базу же записалось «правильные» время и дата — что-то около девяти вечера 30 июня. Django-то умный, он к датам положенные часы сам прибавляет, а вот функция группировки ничего про наше местоположение знать не знала.


Покурив маны, вытащила июль из июня.


Вывод: работать по ночам полезно для вашего кода!